package com.bwie.service.impl;

import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bwie.mapper.ItemMapper;
import com.bwie.pojo.R;
import com.bwie.pojo.TbItemCat;
import com.bwie.service.ItemService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author DarkClown
 * @date 2024-07-25 11:42
 * @project_name hight5
 * @parem
 **/
@Service
public class ItemServiceImpl extends ServiceImpl<ItemMapper, TbItemCat> implements ItemService {
    @Autowired
    ItemMapper itemMapper;

    @Override
    public R treeList() {
        List<TbItemCat> tbItemCats = itemMapper.listTree();
        return R.ok(tbItemCats);
    }





//    static ArrayList<Integer> ids = new ArrayList<>();
//    @Override
//    public R delId(Integer id) {
//        ids.clear();
//
//        QueryWrapper<TbItemCat> queryWrapper = new QueryWrapper<>();
//        List<TbItemCat> tbItemCats1 = itemMapper.selectList(queryWrapper.lambda().eq(TbItemCat::getParentId,id));
//        deleteTree( tbItemCats1);
//        ids.add(id);
//        itemMapper.deleteBatchIds(ids);
//        return R.ok();
//
//    }

//    private List<TbItemCat> deleteTree( List<TbItemCat> tbItemCats1) {
//
//        for (TbItemCat tbItemCat : tbItemCats1) {
//
//            QueryWrapper<TbItemCat> queryWrapper = new QueryWrapper<>();
//            LambdaQueryWrapper<TbItemCat> eq = queryWrapper.lambda().eq(TbItemCat::getParentId, tbItemCat.getId());
//            ids.add(tbItemCat.getId());
//            deleteTree(itemMapper.selectList(eq));
//        }
//
//        return tbItemCats1;
//    }

    @Override
    public R treeList2() {
        List<TbItemCat> tbItemCats1 = itemMapper.selectList(null);
        List<TbItemCat> tbItemCats = selectTree(0,tbItemCats1);
        return R.ok(tbItemCats);
    }

    @Override
    public R delId(Integer id) {
        QueryWrapper<TbItemCat> wrapper = new QueryWrapper<>();

        wrapper.lambda().eq(TbItemCat::getParentId,id);

        List<TbItemCat> tbItemCats = itemMapper.selectList(wrapper);

        for (TbItemCat tbItemCat : tbItemCats) {
            delId(tbItemCat.getId());
        }
        itemMapper.deleteById(id);

        return R.ok();

    }

    private List<TbItemCat> selectTree(Integer a, List<TbItemCat> tbItemCats1) {
//        List<TbItemCat> collect = tbItemCats1.stream().filter(itemCat -> itemCat.getParentId() == a).collect(Collectors.toList());
        Stream<TbItemCat> stream = tbItemCats1.stream();
        Stream<TbItemCat> tbItemCatStream = stream.filter(item -> item.getParentId() == a);
        List<TbItemCat> collect = tbItemCatStream.collect(Collectors.toList());
        collect.stream().forEach(item -> item.setChildren(selectTree(item.getId(),tbItemCats1)));

        return collect;
    }

//@Override
//    public R treeList2() {
//        List<TbItemCat> tbItemCats = selectTree(0L); // 初始调用parentId为0的节点
//        return R.ok(tbItemCats);
//    }
//
//    private List<TbItemCat> selectTree(Long parentId) {
//        QueryWrapper<TbItemCat> queryWrapper = new QueryWrapper<>();
//        queryWrapper.lambda().eq(TbItemCat::getParentId, parentId);
//        List<TbItemCat> tbItemCats = itemMapper.selectList(queryWrapper);
//
//        for (TbItemCat tbItemCat : tbItemCats) {
//            tbItemCat.setChildren(selectTree(tbItemCat.getId()));
//        }
//
//        return tbItemCats;
//    }

//    @Override
//    public R treeList2() {
//        Long a = Long.valueOf(0);
//        QueryWrapper<TbItemCat> queryWrapper = new QueryWrapper<>();
//        queryWrapper.lambda().eq(TbItemCat::getParentId,a);
//        List<TbItemCat> tbItemCats = itemMapper.selectList(queryWrapper);
//        List<TbItemCat> tbItemCats1 = selectTree(tbItemCats);
//        return R.ok(tbItemCats1);
//    }
//
//    private List<TbItemCat> selectTree(List<TbItemCat> tbItemCats1) {
//
//        for (TbItemCat tbItemCat : tbItemCats1) {
//            if (BeanUtil.isEmpty(tbItemCat)) {
//                continue;
//            }
//            QueryWrapper<TbItemCat> queryWrapper = new QueryWrapper<>();
//            queryWrapper.lambda().eq(TbItemCat::getParentId,tbItemCat.getId());
//            List<TbItemCat> tbItemCats = itemMapper.selectList(queryWrapper);
//            tbItemCat.setChildren(tbItemCats);
//            selectTree(tbItemCats);
//        }
//        return tbItemCats1;
//    }


}
